package ru.cod.rs.service;

import java.util.ArrayList;
import java.util.List;

import ru.cod.rs.enums.Buildings;
import ru.cod.rs.enums.Sides;
import ru.cod.rs.enums.Units;
import ru.cod.rs.manager.GameManager;
import ru.cod.rs.object.LiveObject;
import ru.cod.rs.object.MoveObject;
import ru.cod.rs.types.Coords;
import ru.cod.rs.views.GameView;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

public class GameManagerImpl extends DrawManagerImpl implements GameManager {

	protected List<MoveObject> UNITS;
	protected List<LiveObject> BUILDINGS;

	private boolean unitInit = false;

	public GameManagerImpl(GameView view) {
		super(view);
		initBuildings();
	}

	private void initBuildings() {
		BUILDINGS = new ArrayList<LiveObject>();
		pushBuilding(Buildings.EXAMPLE, Sides.BLACK);
		pushBuilding(Buildings.EXAMPLE, Sides.WHITE);
	}

	private void initUnits() {
		UNITS = new ArrayList<MoveObject>();
		unitInit = true;
	}

	
	@Override
	public void draw(Canvas c) {
		drawBackground(c);
		Paint p = new Paint();
		p.setColor(Color.RED);
		c.drawText(
				"Text:" + BUILDINGS.size() + " 1:" + BUILDINGS.get(0).getY(),
				50, view.getHeight(), p);

		drawBuildings(c);

		// if(isUnits()) {
		// drawUnits(c);
		// }
	}

	// ////////////////////////////////////

	public void pushBuilding(Buildings b, Sides s) {
		// TODO: при инициализации если объект не анимированный нужно
		//вернуть размер объекта какой он есть на самом деле иначе выводится
		// не анимированная обрезка объекта
		Coords c;
		Bitmap bm = getImage(b.bitmap());
		LiveObject building = new LiveObject(bm);
	
		c=new Coords(building.getWidth(),view.getHeight()-building.getHeight());
		
		if(Sides.BLACK.equals(s)) {
			c=new Coords(view.getWidth(),view.getHeight()-building.getHeight());
		}
		
		building.setCoords(c);

		building.setMaxHealth(b.maxHealth());
		building.setAnimated(b.animated());
		
		BUILDINGS.add(building);
	}

	public void pushUnits(Units u, Sides s) {
//		Bitmap bm = getImage(u.bitmap());
//		MoveObject unit = new MoveObject(view);
//
//		unit.setImage(bm);
//		unit.setDefence(u.defence());
//		unit.setMaxHealth(u.maxHealth());
//
//		unit.setSpeed(u.speed());
//		if (isUnitsEmpty()) {
//			initUnits();
//		}
//
//		UNITS.add(unit);
	}

	private void drawBuildings(Canvas c) {
		for (LiveObject building : BUILDINGS) {
			building.draw(c);
		}
	}

	// private void drawUnits(Canvas c) {
	//
	// for (MoveObject unit : UNITS) {
	// unit.draw(c);
	// }
	//
	// }

	private void drawBackground(Canvas c) {
		c.drawColor(Color.BLACK);
	}

	private boolean isUnitsEmpty() {
		return !unitInit || UNITS.isEmpty();
	}

	// private boolean isUnits() {
	// return !isUnitsEmpty();
	// }

	@Override
	public boolean isSkip() {
		return false;
	}
}
